<?php
/**
 * Created by PhpStorm.
 * User: qingyun
 * Date: 17/2/18
 * Time: 下午2:48
 */
namespace Common\Model;
use Think\Model;

class BaseModel extends Model
{
    /**
     * 根据字段、条件、排序、限制条数获取大量数据
     * @param string $where 条件
     * @param string $field 字段名
     * @param string $order 排序
     * @limit string $limit 限制获取数据条数
     * @join string $join join查询条件
     * @return mixed
     */
    public function get_many($where = '',$field = '',$order = '',$limit = '',$join = '')
    {
        $sql = 'select';
        if(!empty($field)){
            $sql .= ' '.$field;
        }else{
            $sql .= ' *';
        }
        $sql .= ' from '.$this->getTableName();
        if(!empty($join)){
            $sql .= ' '.$join;
        }
        if(!empty($where)){
            $sql .= ' where '.$where;
        }
        if(!empty($order)){
            $sql .= ' order by '.$order;
        }
        if(!empty($limit)){
            $sql .= ' limit '.$limit;
        }
        return $this->query($sql);
    }

    /**
     * 根据条件获取部分字段值，没有条件则获取所有数据的某些字段值
     * @param string $field
     * @param array $where
     * @return mixed
     */
    public function get_field($field = 'id',$where = [],$many = false)
    {
        if([] == $where){
            return $this->getField($field);
        }
        if($many == true){
            return $this->where($where)->getField($field,true);
        }
        return $this->where($where)->getField($field);
    }

    /**
     * 获取一条数据或者一条数据中的部分字段
     * @param array $where
     * @param string $field
     * @return mixed
     */
    public function get_one_info($where = [],$field = '')
    {
        if('' == $field){
            return $this->where($where)->find();
        }
        return $this->field($field)->where($where)->find();
    }

    /**
     * 添加数据到数据库
     * @param $data 表数据
     * @return bool|mixed
     */
    public function add_data($data)
    {
        return $this->add($data);
    }

    /**
     * 获取全部数据
     * @param  string $type  tree获取树形结构 level获取层级结构
     * @param  string $order 排序方式
     * @return array         结构数据
     */
    public function getTreeData($type='tree',$order='',$name='name',$child='id',$parent='pid'){
        // 判断是否需要排序
        if(empty($order)){
            $data=$this->select();
        }else{
            $data=$this->order($order.' is null,'.$order)->select();
        }
        // 获取树形或者结构数据
        if($type=='tree'){
            $data=\Org\Nx\Data::tree($data,$name,$child,$parent);
        }elseif($type="level"){
            $data=\Org\Nx\Data::channelLevel($data,0,'&nbsp;',$child);
        }
        return $data;
    }
}